package com.school.entity;

import java.util.ArrayList;
import java.util.List;

/**
 * 子类：学生（继承Person）
 * 新增个性属性：已选课程列表；实现父类抽象方法printWork()（打印课表）
 */
public class Student extends Person {
    // 个性属性：已选课程（仅学生拥有，private修饰保证封装）
    private List<Course> selectedCourses = new ArrayList<>();

    // 子类构造方法：通过super()调用父类构造，初始化共性属性
    public Student(String studentId, String name, String gender) {
        super(studentId, name, gender); // 必须放在子类构造第一行
    }

    // 个性方法：选课
    public void selectCourse(Course course) {
        selectedCourses.add(course);
        System.out.println("学生【" + super.name + "】（ID：" + super.id + "）选修了《" + course.getCourseName() + "》");
    }

    // 个性方法：退课（先判断是否已选，避免异常）
    public void dropCourse(Course course) {
        if (selectedCourses.contains(course)) {
            selectedCourses.remove(course);
            System.out.println("学生【" + super.name + "】（ID：" + super.id + "）退选了《" + course.getCourseName() + "》");
        } else {
            System.out.println("学生【" + super.name + "】（ID：" + super.id + "）未选修《" + course.getCourseName() + "》，无法退选");
        }
    }

    // 实现父类抽象方法：打印学生课表（基础版，无教师信息）
    @Override
    public void printWork() {
        System.out.println("\n===== 学生【" + super.name + "】（ID：" + super.id + "）的课表 =====");
        for (Course course : selectedCourses) {
            System.out.println("课程编号：" + course.getCourseId() +
                    " | 课程名称：" + course.getCourseName() +
                    " | 地点：" + course.getLocation() +
                    " | 时间：" + course.getTime() +
                    " | 教师：未知");
        }
    }

    // 重载printWork()：传入教师列表，关联课程与授课教师（增强版）
    public void printWork(List<Teacher> teachers) {
        System.out.println("\n===== 学生【" + super.name + "】（ID：" + super.id + "）的课表 =====");
        for (Course course : selectedCourses) {
            // 匹配当前课程的授课教师
            Teacher courseTeacher = null;
            for (Teacher t : teachers) {
                if (t.getTeachingCourse() != null && t.getTeachingCourse().equals(course)) {
                    courseTeacher = t;
                    break;
                }
            }
            String teacherName = (courseTeacher != null) ? courseTeacher.getName() : "未知";

            System.out.println("课程编号：" + course.getCourseId() +
                    " | 课程名称：" + course.getCourseName() +
                    " | 地点：" + course.getLocation() +
                    " | 时间：" + course.getTime() +
                    " | 教师：" + teacherName);
        }
    }

    // Getter：外部访问已选课程（供测试类或其他类使用）
    public List<Course> getSelectedCourses() {
        return selectedCourses;
    }
}